package com.cykj.shop.utils;

/**
 * @BelongsProject: Cykj-Order-System
 * @BelongsPackage: com.cykj.shop.utils
 * @Author: cwx
 * @CreateTime: 2025/8/21 6:02
 * @Description:
 * @Version: 1.0
 */

import com.cykj.system.api.domain.Shop;

import java.math.BigDecimal;

public final class ShopScoreUtils {

    // 私有构造方法，防止实例化
    private ShopScoreUtils() {}

    /**
     * 计算店铺综合评分（智能排序）
     * @param shop 店铺对象
     * @return 综合评分（0~1）
     */
    public static double calculateScore(Shop shop) {
        double distanceScore = calculateDistanceScore(shop.getDistance());
        double gradeScore = calculateGradeScore(shop.getShopGrade());
        return distanceScore * 0.4 + gradeScore * 0.6;
    }

    /**
     * 计算距离评分
     * @param distance 距离（km）
     * @return 距离评分（0~1）
     */
    public static double calculateDistanceScore(Double distance) {
        return distance != null ? (1 - Math.min(distance / 20, 1)) : 0.5;
    }

    /**
     * 计算店铺等级评分
     * @param shopGrade 店铺等级（BigDecimal，0~5）
     * @return 等级评分（0~1）
     */
    public static double calculateGradeScore(BigDecimal shopGrade) {
        if (shopGrade == null) {
            return 0.5; // 默认值
        }
        return shopGrade.divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
